--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LXST/Pipeline.py 628ef907a8a1c32dd5f0c2bd186f480b5e46bab4 (628ef907) Text, 2.20 KB
T8b949e# Copyright 2024-2026, Mark Qvist
Tff7b72import T7ee787threading
Tff7b72from T7ee787.T7ee787Sources Tff7b72import Tff7b72*
Tff7b72from T7ee787.T7ee787Sinks Tff7b72import Tff7b72*
Tff7b72from T7ee787.T7ee787Codecs Tff7b72import Tff7b72*
Tff7b72from T7ee787.T7ee787Mixer Tff7b72import Te6edf3Mixer
Tff7b72from T7ee787.T7ee787Network Tff7b72import Te6edf3Packetizer
Tff7b72class T56d364PipelineErrorTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72class T56d364PipelineTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3release_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3codecTb4b4b4, Te6edf3sinkTb4b4b4, Te6edf3processor Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3sourceTb4b4b4)Tb4b4b4, Te6edf3SourceTb4b4b4)Tb4b4b4: Tff7b72raise Te6edf3PipelineErrorTb4b4b4(Ta5d6ff"Ta5d6ffAudio pipeline initialised with invalid sourceTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3sinkTb4b4b4)Tb4b4b4, Te6edf3SinkTb4b4b4) Tb4b4b4: Tff7b72raise Te6edf3PipelineErrorTb4b4b4(Ta5d6ff"Ta5d6ffAudio pipeline initialised with invalid sinkTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3codecTb4b4b4)Tb4b4b4, Te6edf3CodecTb4b4b4) Tb4b4b4: Tff7b72raise Te6edf3PipelineErrorTb4b4b4(Ta5d6ff"Ta5d6ffAudio pipeline initialised with invalid codecTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsource Tff7b72= Te6edf3source
Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffpipeline Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffsink Tff7b72= Te6edf3sink
Tff7b72selfTff7b72.Td2a8ffcodec Tff7b72= Te6edf3codec
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3sinkTb4b4b4, Te6edf3LoopbackTb4b4b4)Tb4b4b4: Te6edf3sinkTff7b72.Td2a8ffsamplerate Tff7b72= Te6edf3sourceTff7b72.Td2a8ffsamplerate
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3LoopbackTb4b4b4)Tb4b4b4: Te6edf3sourceTff7b72.Td2a8ff_sink Tff7b72= Te6edf3sink
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3MixerTb4b4b4)Tb4b4b4: Te6edf3sourceTff7b72.Td2a8ff_sink Tff7b72= Te6edf3sink
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3sinkTb4b4b4, Te6edf3PacketizerTb4b4b4)Tb4b4b4: Te6edf3sinkTff7b72.Td2a8ffsource Tff7b72= Te6edf3source
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3sinkTb4b4b4, Te6edf3OpusFileSinkTb4b4b4)Tb4b4b4: Te6edf3sinkTff7b72.Td2a8ffsource Tff7b72= Te6edf3source
Tff7b72def Td2a8ffreleaseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrelease_lockTff7b72.Td2a8fflockedTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72return
Tff7b72with Tff7b72selfTff7b72.Td2a8ffrelease_lockTb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffreleasedTa5d6ff"Tb4b4b4) Tff7b72or Tff7b72not Tff7b72selfTff7b72.Td2a8ffreleasedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreleased Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffsource Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Tff7b72None
Tf0883e@property
Tff7b72def Td2a8ffcodecTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsourceTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffcodec
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72None
Tf0883e@codecTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffcodecTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3codecTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72== Te6edf3codecTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Te6edf3codec
Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffcodec Tff7b72= Tff7b72selfTff7b72.Td2a8ff_codec
Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffcodecTff7b72.Td2a8ffsink Tff7b72= Tff7b72selfTff7b72.Td2a8ffsink
Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffcodecTff7b72.Td2a8ffsource Tff7b72= Tff7b72selfTff7b72.Td2a8ffsource
Tf0883e@property
Tff7b72def Td2a8ffsinkTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsourceTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffsink
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72None
Tf0883e@property
Tff7b72def Td2a8ffrunningTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffshould_run
Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffrunningTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrunningTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────